﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Biblioteca.Utils;
using Biblioteca.DataBase;
using Pms.Utils;
using SERIX.Util;
using System.Data.Common;

namespace SERIX
{
    public class CriteriosPesquisaOrganizacoes : CriteriosPesquisa
    {
        public string FiltroMunicipio { get; set; }
        public string DscFiltroMunicipio { get; set; }
        public string FiltroSimplesCombo { get; set; }
        public string FiltroTipoOrganizacao { get; set; }
        public Boolean FiltroSomenteAtivo { get; set; }
        public string MestreMunicipio { get; set; }
    }

    public partial class Organizacoes : Seguranca
    {

        string _idt_mun = "";
        string _filtro = "";
        CriteriosPesquisaOrganizacoes criteriosPesquisa;

        private void lovSelecao(string chave, string descricao)
        {
            tbMunicipio.Text = descricao;
            tbMunicipio.Attributes.Add("chave", chave);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["datatable"] != null) { Session.Remove("datatable"); }
            base.OnLoad(e);
            btnNovo.Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            lovMunicipio.Selecao += new SERIX.Controles.lovGenerica.SelecaoDelegate(lovSelecao);
            lovMunicipio.ConfigurarLov("Serix", "srx_municipios", "IDT_MUN", "NOME_MUN", "NOME_MUN", "Pesquisa de Municípios", "Nome");
            if (!Page.IsPostBack)
            {
                BiblioSERIX.PreencherDdl(ref ddlTipoOrganizacao, CTiposOrganizacoes.ObterTodos(UsuAut.Login), "DSC_TPO_ORG", "IDT_TPO_ORG");
            }

            InicializarCriteriosPesquisa();
            //Mestre
            if (Request["idt_mun"] != null)
            {
                _idt_mun = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_mun"]));
                _filtro = "&idt_mun=" + Server.UrlEncode(Request["idt_mun"]);
            }
            else if (criteriosPesquisa != null && !string.IsNullOrEmpty(criteriosPesquisa.MestreMunicipio))
            {
                _idt_mun = criteriosPesquisa.MestreMunicipio;
                _filtro = "&idt_mun=" + Server.UrlEncode(Criptografia.Criptografar(_idt_mun));
            }

            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Navegador1.CarregueBotoes(0);
                Pesquisar();
            }
            else if (!string.IsNullOrEmpty(_idt_mun))
            {
                SalvarPesquisa();
            }
            Navegador1.Pesquisar += new SERIX.Controles.Navegador.PesquisarDelegate(Pesquisar);
            txtFiltrar.Focus();
        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaOrganizacoes)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            string municipio = "";
            if (tbMunicipio.Attributes["chave"] != null)
            {
                municipio = tbMunicipio.Attributes["chave"];
            }
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaOrganizacoes() { FiltroSimples = txtFiltrar.Text, FiltroSomenteAtivo = cbAtivos.Checked,  PaginaAtual = 1, FiltroMunicipio = municipio, DscFiltroMunicipio = tbMunicipio.Text, MestreMunicipio = _idt_mun, FiltroSimplesCombo = ddlPor.SelectedValue, FiltroTipoOrganizacao = ddlTipoOrganizacao.SelectedValue };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                criteriosPesquisa.FiltroSimples = txtFiltrar.Text;
                criteriosPesquisa.FiltroSimplesCombo = ddlPor.SelectedValue;
                criteriosPesquisa.FiltroMunicipio = municipio;
                criteriosPesquisa.DscFiltroMunicipio = tbMunicipio.Text;
                criteriosPesquisa.FiltroTipoOrganizacao = ddlTipoOrganizacao.SelectedValue;
                criteriosPesquisa.FiltroSomenteAtivo = cbAtivos.Checked;
                criteriosPesquisa.MestreMunicipio = _idt_mun;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                if (string.IsNullOrEmpty(_idt_mun) && !string.IsNullOrEmpty(criteriosPesquisa.MestreMunicipio))
                {
                    _idt_mun = criteriosPesquisa.MestreMunicipio;
                    _filtro = "&idt_mun=" + Server.UrlEncode(Criptografia.Criptografar(criteriosPesquisa.MestreMunicipio));
                }
                else if (!string.IsNullOrEmpty(criteriosPesquisa.MestreMunicipio) && _idt_mun != criteriosPesquisa.MestreMunicipio)
                {
                    criteriosPesquisa.PaginaAtual = 1;
                    criteriosPesquisa.FiltroSimples = "";
                    criteriosPesquisa.FiltroTipoOrganizacao = "";
                    criteriosPesquisa.FiltroMunicipio = "";
                    criteriosPesquisa.FiltroSomenteAtivo = false;
                }
                if (!string.IsNullOrEmpty(criteriosPesquisa.FiltroMunicipio))
                {
                    tbMunicipio.Attributes.Add("chave", criteriosPesquisa.FiltroMunicipio);
                    tbMunicipio.Text = criteriosPesquisa.DscFiltroMunicipio;
                }
                txtFiltrar.Text = criteriosPesquisa.FiltroSimples;
                ddlPor.SelectedValue = criteriosPesquisa.FiltroSimplesCombo;
                ddlTipoOrganizacao.SelectedValue = criteriosPesquisa.FiltroTipoOrganizacao;
                cbAtivos.Checked = criteriosPesquisa.FiltroSomenteAtivo;
                Pesquisar();
                return true;
            }
            return false;
        }



        /// <summary>
        /// Método que trata o recebimento do parametro do mestre
        /// </summary>
        /// <returns></returns>
        private string MestreDetalhe(string tag)
        {
            string filtro = "";
            if (!String.IsNullOrEmpty(_idt_mun))
            {
                filtro = " " + tag + " idt_mun = " + _idt_mun;
                tdMestre.Visible = true;
                CMunicipios mestre = CMunicipios.PesquisaporCodigo(_idt_mun, UsuAut.Login);
                lbMestre.Text = "Município: " + mestre.Nome_mun;
                lbMunicipio.Visible = false;
                tbMunicipio.Visible = false;
                lovMunicipio.Visible = false;
            }
            else
            {
                tdMestre.Visible = false;
            };
            return filtro;
        }

        protected void Todos()
        {
            txtFiltrar.Text = "";
            ddlTipoOrganizacao.SelectedIndex = 0;
            tbMunicipio.Text = "";
            cbAtivos.Checked = false;
            lblFiltro.Text = "Filtro:";
            string filtro = "";
            filtro = MestreDetalhe("where");
            string SQL = @" select idt_org, idt_mun, idt_tpo_org, ano_criacao, nom_org, cnpj, status, idt_com  from  Serix.SRX_ORGANIZACOES " + filtro + " order by NOM_ORG ";
            QueryPaginada qy = null;
            try
            {
                qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                gridView.DataBind();
                Navegador1.CarregueBotoes(qy.QtdLinhas());
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
            finally
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void Pesquisar()
        {

            QueryPaginada qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (txtFiltrar.Text != "" || ddlTipoOrganizacao.SelectedIndex > 0 || !string.IsNullOrEmpty(tbMunicipio.Text) || cbAtivos.Checked)
                {
                    Session["PagAtual"] = 1;
                    string filtro = "";
                    string dsc_filtro = "";
                    filtro = MestreDetalhe("and");

                    string filtro_municipio = "";
                    if (!string.IsNullOrEmpty(tbMunicipio.Text))
                    {
                        dsc_filtro = " Municipio = \"" + tbMunicipio.Text + "\"";
                        filtro = filtro + " and IDT_MUN = :IDT_MUN ";
                    }

                    string filtro_tipo_organizacao = "";
                    if (ddlTipoOrganizacao.SelectedIndex > 0)
                    {
                        dsc_filtro = dsc_filtro + " Tipo de Organização = \"" + ddlTipoOrganizacao.SelectedItem + "\"";
                        filtro = filtro + " and IDT_TPO_ORG = :IDT_TPO_ORG ";
                    }

                    string filtro_por = "";
                    if (!string.IsNullOrEmpty(txtFiltrar.Text))
                    {
                        if (ddlPor.SelectedIndex == 0)
                        {
                            dsc_filtro = dsc_filtro + " Nome = \"" + txtFiltrar.Text + "\"";
                            filtro = filtro + " and UPPER(T.NOM_ORG) LIKE '%' || UPPER(:POR) || '%' ";
                        }
                        else
                        {
                            dsc_filtro = dsc_filtro + " CNPJ = \"" + txtFiltrar.Text + "\"";
                            filtro = filtro + " and CNPJ = :POR ";
                        }
                    }

                    if (cbAtivos.Checked)
                    {
                        dsc_filtro = dsc_filtro + " Somente Escritórios Ativos ";
                        filtro = filtro + " and T.sta_org = 'A' ";
                    }

                    lblFiltro.Text = "Filtro:" + filtro_municipio + filtro_por + filtro_tipo_organizacao;

                    string SQL = @" SELECT idt_org, idt_mun, idt_tpo_org, ano_criacao, sta_org, nom_org, cnpj 
                                      FROM Serix.SRX_ORGANIZACOES  T 
                                      WHERE 1=1 " +
                                      filtro + " order by NOM_ORG";
                    try
                    {
                        qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, UsuAut.Login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);

                        if (!string.IsNullOrEmpty(tbMunicipio.Text))
                        {
                            qy.AdicionarParametro("IDT_MUN", DbType.Int32, tbMunicipio.Attributes["chave"]);
                        }
                        if (ddlTipoOrganizacao.SelectedIndex > 0)
                        {
                            qy.AdicionarParametro("IDT_TPO_ORG", DbType.Int32, ddlTipoOrganizacao.SelectedValue);
                        }
                        if (!string.IsNullOrEmpty(txtFiltrar.Text))
                        {
                            qy.AdicionarParametro("POR", DbType.String, txtFiltrar.Text);
                        }
                        gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                        gridView.DataBind();
                        Navegador1.CarregueBotoes(qy.QtdLinhas());
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                        Todos();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
                else
                    //Caso o filtro esteja vazio, mostre todos
                    Todos();
            }
            catch
            //Em caso de erro, mostra todos as unidades
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
                Todos();
            }
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            Response.Redirect("OrganizacoesManut.aspx?OP=I" + _filtro);
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Pesquisar();
            SalvarPesquisa();
        }

        protected void btnTodos_Click(object sender, EventArgs e)
        {
            criteriosPesquisa.PaginaAtual = 1;
            Todos();
            SalvarPesquisa();
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string CNPJ = ((DbDataRecord)e.Row.DataItem)["CNPJ"].ToString();
                if (!string.IsNullOrEmpty(CNPJ))
                {
                    ((Label)e.Row.Cells[gridView.Columns.Count - 6].Controls[1]).Text = Biblioteca.Utils.Biblio.FormateCNPJ(CNPJ);
                }
                string IDT_ORG = ((DbDataRecord)e.Row.DataItem)["IDT_ORG"].ToString();
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).NavigateUrl = "OrganizacoesManut.aspx?OP=R&idt_org=" + Server.UrlEncode(Criptografia.Criptografar(IDT_ORG)) + _filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).NavigateUrl = "OrganizacoesManut.aspx?OP=U&idt_org=" + Server.UrlEncode(Criptografia.Criptografar(IDT_ORG)) + _filtro;
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).NavigateUrl = "OrganizacoesManut.aspx?OP=DATANASC_CONJUGE&idt_org=" + Server.UrlEncode(Criptografia.Criptografar(IDT_ORG)) + _filtro;
                ((DropDownList)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Attributes.Add("chave", Server.UrlEncode(Criptografia.Criptografar(IDT_ORG)));
                //SEGURANÇA
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).Enabled = !PermissaoManut.Equals(Constantes.PERM_NEGADA);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            }
        }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (((DropDownList)sender).SelectedIndex == 1)
            {
                string chave = ((DropDownList)sender).Attributes["chave"];
                Response.Redirect("BenefOrganizacoes.aspx?idt_org=" + chave);
            }
        }

        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            criteriosPesquisa.MestreMunicipio = "";
            Session[Page.ToString()] = criteriosPesquisa;
            Response.Redirect("~/Organizacoes.aspx");
        }


    }
}
